/**
 * 将 ISO 时间字符串转换为本地时间（默认北京时间）
 * @param isoTime - ISO 格式时间字符串（如 2023-11-09T16:31:44.104Z）
 * @param timezone - 时区（东八区为8，默认北京时间）
 * @returns 格式化后的时间字符串（如 2023-11-10 00:31:44）或错误信息
 */
export function convertIsoToLocalTime(isoTime: string, timezone: number = 8): string {
  // 验证输入参数类型
  if (typeof isoTime !== 'string') {
    return '无效的时间格式：必须传入字符串'
  }
  if (
    typeof timezone !== 'number' ||
    !Number.isInteger(timezone) ||
    timezone < -12 ||
    timezone > 14
  ) {
    return '无效的时区：必须是 -12 到 14 之间的整数'
  }

  const date = new Date(isoTime)
  // 验证时间格式有效性
  if (isNaN(date.getTime())) {
    return '无效的时间格式：请传入 ISO 8601 格式时间（如 2023-11-09T16:31:44.104Z）'
  }

  // 补零工具函数
  const padZero = (num: number): string => num.toString().padStart(2, '0')

  // 转换为目标时区时间（UTC时间 + 时区小时数）
  const utcTime = date.getTime()
  const targetTime = utcTime + timezone * 60 * 60 * 1000
  const targetDate = new Date(targetTime)

  const year = targetDate.getUTCFullYear()
  const month = padZero(targetDate.getUTCMonth() + 1) // 月份从0开始
  const day = padZero(targetDate.getUTCDate())
  const hours = padZero(targetDate.getUTCHours())
  const minutes = padZero(targetDate.getUTCMinutes())
  const seconds = padZero(targetDate.getUTCSeconds())

  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`
}

// 示例使用
// const isoTime: string = '2023-11-09T16:31:44.104Z';
// console.log(convertIsoToLocalTime(isoTime)); // 输出：2023-11-10 00:31:44
// console.log(convertIsoToLocalTime(isoTime, 0)); // 转换为UTC时间：2023-11-09 16:31:44
// console.log(convertIsoToLocalTime(isoTime, 9)); // 转换为东九区时间：2023-11-10 01:31:44
